﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIGCBI.Entities;
using SIGCBI.Repository;
using Microsoft.Practices.Unity;

namespace SIGCBI.BusinessLogic
{
    public interface IUsuarioBL
    {
        List<USUARIO> GetAllFromUsuario();
        List<USUARIO> GetFromUsuarioByTrabajador(string descripcion);
        List<USUARIO> GetFromUsuarioByRol(string descripcion);
        USUARIO GetAllFromUsuarioByTrabajadorId(string dni);

        void Ingresar(USUARIO usuario);
        void VerificarAsignacion(USUARIO usuario);
        void ValidarPasswd(USUARIO usuario);

        void AddUsuario(USUARIO usuario);
        void UpdateUsuario(USUARIO usuario);
        void DeleteUsuario(Int32 numero);

        void UpdatePasswdUsuario(USUARIO usuario);
    }

    public class UsuarioBL : IUsuarioBL
    {
        [Dependency]
        public IUsuarioRepository usuarioRepository { get; set; }

        public List<USUARIO> GetAllFromUsuario()
        {
            return usuarioRepository.GetAllFromUsuario();
        }

        public List<USUARIO> GetFromUsuarioByTrabajador(string descripcion)
        {
            return usuarioRepository.GetFromUsuarioByTrabajador(descripcion);
        }

        public List<USUARIO> GetFromUsuarioByRol(string descripcion)
        {
            return usuarioRepository.GetFromUsuarioByRol(descripcion);
        }

        public USUARIO GetAllFromUsuarioByTrabajadorId(string dni)
        {
            return usuarioRepository.GetAllFromUsuarioByTrabajadorId(dni);
        }

        public void Ingresar(USUARIO usuario)
        {
            var existe = usuarioRepository.ExisteUsuario(usuario.TRABAJADOR.Dni, usuario.Password);

            if (!existe)
            {
                var error = string.Format("USUARIO NO REGISTRADO");
                throw new Exception(error);
            }
        }

        public void VerificarAsignacion(USUARIO usuario)
        {
            var existe = usuarioRepository.ExisteUsuarioRol(usuario.IdTrabajador);

            if (existe)
            {
                var error = string.Format("Usuario ya asignado a un Rol, pero puede Editarlo");
                throw new Exception(error);
            }
        }

        public void ValidarPasswd(USUARIO usuario)
        {
            var existe = usuarioRepository.PasswdCorrecta(usuario.Password);

            if (!existe)
            {
                var error = string.Format("PASSWORD INCORRECTA");
                throw new Exception(error);
            }
        }

        public void AddUsuario(USUARIO usuario)
        {
            usuarioRepository.AddUsuario(usuario);
        }

        public void UpdateUsuario(USUARIO usuario)
        {
            usuarioRepository.UpdateUsuario(usuario);
        }

        public void DeleteUsuario(int numero)
        {
            usuarioRepository.DeleteUsuario(numero);
        }

        public void UpdatePasswdUsuario(USUARIO usuario)
        {
            usuarioRepository.UpdatePasswdUsuario(usuario);
        }
    }
}
